{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 读取数据文件及数据对象表达\n",
    "## 读取原始数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x,y,x,y,x,y,x,y\n",
      "\n",
      "10.00 ,8.04 ,10.00 ,9.14 ,10.00 ,7.46 ,8.00 ,6.58 \n",
      "\n",
      "8.00 ,6.95 ,8.00 ,8.14 ,8.00 ,6.77 ,8.00 ,5.76 \n",
      "\n",
      "13.00 ,7.58 ,13.00 ,8.74 ,13.00 ,12.74 ,8.00 ,7.71 \n",
      "\n",
      "9.00 ,8.81 ,9.00 ,8.77 ,9.00 ,7.11 ,8.00 ,8.84 \n",
      "\n",
      "11.00 ,8.33 ,11.00 ,9.26 ,11.00 ,7.81 ,8.00 ,8.47 \n",
      "\n",
      "14.00 ,9.96 ,14.00 ,8.10 ,14.00 ,8.84 ,8.00 ,7.04 \n",
      "\n",
      "6.00 ,7.24 ,6.00 ,6.13 ,6.00 ,6.08 ,8.00 ,5.25 \n",
      "\n",
      "4.00 ,4.26 ,4.00 ,3.10 ,4.00 ,5.39 ,19.00 ,12.50 \n",
      "\n",
      "12.00 ,10.84 ,12.00 ,9.13 ,12.00 ,8.15 ,8.00 ,5.56 \n",
      "\n",
      "7.00 ,4.82 ,7.00 ,7.26 ,7.00 ,6.42 ,8.00 ,7.91 \n",
      "\n",
      "5.00 ,5.68 ,5.00 ,4.74 ,5.00 ,5.73 ,8.00 ,6.89 \n",
      "\n"
     ]
    }
   ],
   "source": [
    "file=open('Anscombe.csv','r')\n",
    "for line in file:\n",
    "       print(line) # 读取表内原始数据\n",
    "        \n",
    "m=line.split(',')\n",
    "filecol=int(len(m))\n",
    "group=int(len(m)/2) # 求出数据组数\n",
    "\n",
    "file.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 以列表的形式整理数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "No.1\n",
      "{'x1': [10.0, 8.0, 13.0, 9.0, 11.0, 14.0, 6.0, 4.0, 12.0, 7.0, 5.0], 'y1': [8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.82, 5.68]} \n",
      "\n",
      "No.2\n",
      "{'x2': [10.0, 8.0, 13.0, 9.0, 11.0, 14.0, 6.0, 4.0, 12.0, 7.0, 5.0], 'y2': [9.14, 8.14, 8.74, 8.77, 9.26, 8.1, 6.13, 3.1, 9.13, 7.26, 4.74]} \n",
      "\n",
      "No.3\n",
      "{'x3': [10.0, 8.0, 13.0, 9.0, 11.0, 14.0, 6.0, 4.0, 12.0, 7.0, 5.0], 'y3': [7.46, 6.77, 12.74, 7.11, 7.81, 8.84, 6.08, 5.39, 8.15, 6.42, 5.73]} \n",
      "\n",
      "No.4\n",
      "{'x4': [8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 19.0, 8.0, 8.0, 8.0], 'y4': [6.58, 5.76, 7.71, 8.84, 8.47, 7.04, 5.25, 12.5, 5.56, 7.91, 6.89]} \n",
      "\n"
     ]
    }
   ],
   "source": [
    "def getData(fileName,n):\n",
    "    ''' \n",
    "    读取文件数据\n",
    "    '''\n",
    "    dataFile = open(fileName, 'r')\n",
    "    x = []\n",
    "    y = []\n",
    "    discardHeader = dataFile.readline()# 读取表头\n",
    "    n=2*n\n",
    "    for line in dataFile:\n",
    "        a = line.split(',')\n",
    "        d, m= a[n],a[n+1]\n",
    "        x.append(float(d))\n",
    "        y.append(float(m))\n",
    "    dataFile.close()\n",
    "    return (x, y) # 返回该组数据x，y的列表形式\n",
    "\n",
    "inputFile='Anscombe.csv'\n",
    "i=0\n",
    "\n",
    "for i in range(group):\n",
    "    d={}\n",
    "    xlabel='x'+str(i+1)\n",
    "    ylabel='y'+str(i+1)\n",
    "    print('No.'+str(i+1))\n",
    "    x,y = getData(inputFile,i)\n",
    "    d[xlabel]=x\n",
    "    d[ylabel]=y\n",
    "    print(d,'\\n')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 以字典方式将数据分类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "No.1\n",
      "{'x1': 10.0, 'y1': 8.04}\n",
      "{'x1': 8.0, 'y1': 6.95}\n",
      "{'x1': 13.0, 'y1': 7.58}\n",
      "{'x1': 9.0, 'y1': 8.81}\n",
      "{'x1': 11.0, 'y1': 8.33}\n",
      "{'x1': 14.0, 'y1': 9.96}\n",
      "{'x1': 6.0, 'y1': 7.24}\n",
      "{'x1': 4.0, 'y1': 4.26}\n",
      "{'x1': 12.0, 'y1': 10.84}\n",
      "{'x1': 7.0, 'y1': 4.82}\n",
      "{'x1': 5.0, 'y1': 5.68}\n",
      "\n",
      "\n",
      "No.2\n",
      "{'x2': 10.0, 'y2': 9.14}\n",
      "{'x2': 8.0, 'y2': 8.14}\n",
      "{'x2': 13.0, 'y2': 8.74}\n",
      "{'x2': 9.0, 'y2': 8.77}\n",
      "{'x2': 11.0, 'y2': 9.26}\n",
      "{'x2': 14.0, 'y2': 8.1}\n",
      "{'x2': 6.0, 'y2': 6.13}\n",
      "{'x2': 4.0, 'y2': 3.1}\n",
      "{'x2': 12.0, 'y2': 9.13}\n",
      "{'x2': 7.0, 'y2': 7.26}\n",
      "{'x2': 5.0, 'y2': 4.74}\n",
      "\n",
      "\n",
      "No.3\n",
      "{'x3': 10.0, 'y3': 7.46}\n",
      "{'x3': 8.0, 'y3': 6.77}\n",
      "{'x3': 13.0, 'y3': 12.74}\n",
      "{'x3': 9.0, 'y3': 7.11}\n",
      "{'x3': 11.0, 'y3': 7.81}\n",
      "{'x3': 14.0, 'y3': 8.84}\n",
      "{'x3': 6.0, 'y3': 6.08}\n",
      "{'x3': 4.0, 'y3': 5.39}\n",
      "{'x3': 12.0, 'y3': 8.15}\n",
      "{'x3': 7.0, 'y3': 6.42}\n",
      "{'x3': 5.0, 'y3': 5.73}\n",
      "\n",
      "\n",
      "No.4\n",
      "{'x4': 8.0, 'y4': 6.58}\n",
      "{'x4': 8.0, 'y4': 5.76}\n",
      "{'x4': 8.0, 'y4': 7.71}\n",
      "{'x4': 8.0, 'y4': 8.84}\n",
      "{'x4': 8.0, 'y4': 8.47}\n",
      "{'x4': 8.0, 'y4': 7.04}\n",
      "{'x4': 8.0, 'y4': 5.25}\n",
      "{'x4': 19.0, 'y4': 12.5}\n",
      "{'x4': 8.0, 'y4': 5.56}\n",
      "{'x4': 8.0, 'y4': 7.91}\n",
      "{'x4': 8.0, 'y4': 6.89}\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "def getData(fileName,n):\n",
    "    ''' \n",
    "    读取第n组数据\n",
    "    '''\n",
    "    dataFile = open(fileName, 'r')\n",
    "    x = []\n",
    "    y = []\n",
    "    discardHeader = dataFile.readline()# 读取表头\n",
    "    n=2*n\n",
    "    for line in dataFile:\n",
    "        a = line.split(',')\n",
    "        d, m= a[n],a[n+1]\n",
    "        x.append(float(d))\n",
    "        y.append(float(m))\n",
    "    dataFile.close()\n",
    "    return (x, y) # 返回该组数据x，y的列表形式\n",
    "\n",
    "inputFile='Anscombe.csv'\n",
    "i=0\n",
    "\n",
    "for i in range(group): #将每组数据以字典的形式表达\n",
    "    d={}\n",
    "    xlabel='x'+str(i+1)\n",
    "    ylabel='y'+str(i+1)\n",
    "    print('No.'+str(i+1))\n",
    "    x,y = getData(inputFile,i)\n",
    "    \n",
    "    z=0\n",
    "    while z<len(x):\n",
    "        d[xlabel]=x[z]\n",
    "        d[ylabel]=y[z]\n",
    "        z+=1\n",
    "        print(d)\n",
    "    print('\\n')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 统计指标计算和输出\n",
    "\n",
    "## 计算均值、方差和相关系数统计指标\n",
    "### 计算均值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第 1 组中x的均值为： 9.0 ，y的均值为： 7.5\n",
      "第 2 组中x的均值为： 9.0 ，y的均值为： 7.5\n",
      "第 3 组中x的均值为： 9.0 ，y的均值为： 7.5\n",
      "第 4 组中x的均值为： 9.0 ，y的均值为： 7.5\n"
     ]
    }
   ],
   "source": [
    "def avg(number):\n",
    "    '''\n",
    "    计算数据平均值\n",
    "    '''\n",
    "    total=0\n",
    "    for num in number:\n",
    "        total+=num\n",
    "    average=total/len(number)\n",
    "    return round(average,1) # 规定小数点后位数\n",
    "\n",
    "for i in range(group):\n",
    "    x,y = getData(inputFile,i)\n",
    "    print(\"第\",(i+1),\"组中x的均值为：\",avg(x),\"，y的均值为：\",avg(y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 计算方差"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第 1 组中x的方差为： 10.0 ，y的方差为： 3.75\n",
      "第 2 组中x的方差为： 10.0 ，y的方差为： 3.75\n",
      "第 3 组中x的方差为： 10.0 ，y的方差为： 3.75\n",
      "第 4 组中x的方差为： 10.0 ，y的方差为： 3.75\n"
     ]
    }
   ],
   "source": [
    "def pvar(number):\n",
    "    '''\n",
    "    计算方差\n",
    "    '''\n",
    "    z=0\n",
    "    i=0\n",
    "    while i < len(number):\n",
    "        z+=(number[i]-avg(number))**2\n",
    "        i+=1\n",
    "    variance=z/len(number)\n",
    "    return round(variance,2)\n",
    "\n",
    "for i in range(group):\n",
    "    x,y = getData(inputFile,i)\n",
    "    print(\"第\",(i+1),\"组中x的方差为：\",pvar(x),\"，y的方差为：\",pvar(y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 计算相关系数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第 1 组的相关系数为： 0.817\n",
      "第 2 组的相关系数为： 0.816\n",
      "第 3 组的相关系数为： 0.816\n",
      "第 4 组的相关系数为： 0.816\n"
     ]
    }
   ],
   "source": [
    "def pearson(xi,yi):\n",
    "    '''\n",
    "    计算xi与yi的相关系数\n",
    "    '''\n",
    "    t=0\n",
    "    i=0\n",
    "    while i < len(xi):\n",
    "        t+=(xi[i]-avg(xi))*(yi[i]-avg(yi))\n",
    "        i+=1\n",
    "    r=t/((pvar(xi)*pvar(yi))**0.5*len(xi))\n",
    "    return round(r,3)\n",
    "\n",
    "for i in range(group):\n",
    "    x,y = getData(inputFile,i)\n",
    "    print(\"第\",(i+1),\"组的相关系数为：\",pearson(x,y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 使用字符输出统计结果表格"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "------------------------------------------------------------------------------------------\n",
      "    No    \t  x-avg   \t  x-pvar  \t  y-avg   \t  y-pvar  \tpearson_r \n",
      "------------------------------------------------------------------------------------------\n",
      "    1     \t   9.0    \t   10.0   \t   7.5    \t   3.75   \t  0.817   \n",
      "    2     \t   9.0    \t   10.0   \t   7.5    \t   3.75   \t  0.816   \n",
      "    3     \t   9.0    \t   10.0   \t   7.5    \t   3.75   \t  0.816   \n",
      "    4     \t   9.0    \t   10.0   \t   7.5    \t   3.75   \t  0.816   \n",
      "------------------------------------------------------------------------------------------\n"
     ]
    }
   ],
   "source": [
    "tplt = \"{0:^10}\\t{1:^10}\\t{2:^10}\\t{3:^10}\\t{4:^10}\\t{5:^10}\" # 规定格式\n",
    "print('-'*(10*6+5*6))\n",
    "print(tplt.format(\"No\", \"x-avg\", \"x-pvar\",\"y-avg\",\"y-pvar\",\"pearson_r\")) # 表头\n",
    "print('-'*(10*6+5*6))\n",
    "\n",
    "i=0\n",
    "for i in range(group):\n",
    "    x,y = getData(inputFile,i)\n",
    "    print(tplt.format(i+1,avg(x),pvar(x),avg(y),pvar(y),pearson(x,y))) # 输出每组数据\n",
    "print('-'*(10*6+5*6))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 线性回归和图形输出"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第 1 组线性回归方程为： y = 0.50009 x+3.00009\n",
      "第 2 组线性回归方程为： y = 0.50000 x+3.00091\n",
      "第 3 组线性回归方程为： y = 0.49973 x+3.00245\n",
      "第 4 组线性回归方程为： y = 0.49991 x+3.00173\n"
     ]
    },
    {
     "data": {
      "image/png": "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a9fWutVsLnv37lWzZs2Um5urM844Q8eOHatsMqWlpbrxxhv18ssvq0WLFvrLX/5S+bqdO3fqrLPOUrNmzRpcMwCkCvoT/QnIBIwAnaQDBw6oQ4cOlY/vvvvuE76me/fueuihhzRixAgdP35czZo10+zZs3XFFVfoN7/5jXr06KEuXbrUu0tBfXr27KmCggL98Y9/1He/+90619W3b19de+21KigoUKdOnVRUVKTTTjutwbXu2bNH9913n5o0aaJmzZppzpw5kiJbpuqaXqFXr1763ve+pz59+kiSbrnlFvXs2bNyd4K6XHXVVXrqqad0zjnnqGvXrjrllFM0adKkmD6bCsXFxcrPz698PGLECC1dulT9+vXT9ddfr0cffVTdunXTz372M02aNEmXX365JOmdd97RVVdddVLrBoBkoD/RnwBE0diDhoK4hfkg01S2d+9ed3ffv3+/9+7du9YBm2H0wx/+0OfNmxf35a5Zs8ZvuummEz5v9OjR/v7770edz/cS6UicBIH+lGT0p6/Qn4D6xdKj2AUug02YMEGFhYXq1auXvvWtb9U6YDNMNm/erK5du6qsrEzjx4+P+/J79uypIUOGnPBCc9ddd526dOkS9/UDAL5Cf/oK/QmIP/N6DvoLi6KiIl+1alW1aRs3blS3bt0CqgioG99LpCMzW+3uRUHXEUb0J6QKvpdIV7H0KEaAAAAAAGSMtDgJwl133aW1a9fGdZmFhYWVV4EGACAW9CcACB9GgAAAAABkjLQYAWJLGAAgjOhPABA+jAABAAAAyBgEoJB444031KVLF1144YX61a9+VedzOnfurIsvvliFhYUqKipq0OvrW260eY8//rjy8/OVl5cX962XBw8eVJ8+fVRQUKC8vDz94he/iPrceL6nIN4rAKSDMPWnhtQSq6D6U7Q+9P3vf19t27atdlFUAHHS2AsHBXFL9wvNHT161C+44ALfvHmzHzp0yHv06OHr16+v9bxOnTr5559/3uDX17fcaPPWrVvneXl5vn//fj9y5IgPGzbMP/zww0a9n3feecfHjx9f57zjx49XXuDu8OHD3qdPH1+xYkVC31Mi32tN6fS9BCqIC6HSn0LQnxpaS33C1p/q60OLFi3y1atXe15eXqPeYzTp9L0EqoqlRzECdBLWrVunSy+9tPLxmjVrNHTo0EYv5+9//7suvPBCXXDBBWrevLnGjh2rl19++aRfX99yo83buHGj+vbtq9zcXDVt2lSDBg3SSy+9JEkaMmSIFixYIEl64IEHNHHixEa/VzNTy5YtJUlHjhzRkSNHZGYJfU+xvFcASGXp2J/qe02q9qf6+tDAgQPVunXrRr8PACdGADoJeXl52rx5c+XVme+55x7NmDGj2nMGDBigwsLCWrc333yz8jk7duzQeeedV/m4Q4cO2rFjR631mZlGjBih3r17a+7cuSd8fX3LjTYvPz9fixcv1s6dO3XgwAHNnz9f27ZtkyRNnTpV06dP17PPPqt3331Xjz32WEyf27Fjx1RYWKi2bdtq+PDhuuSSS2o9J57vKZb3CgCpLB37U32vSdX+RB8CgpEWZ4ELSpMmTZSXl6f169dr06ZN6tixo3r16lXtOUuWLDnhciKjd9XVtdVp2bJlOuecc/TZZ59p+PDh6tq1qwYOHBj19fUtN9q8bt26adKkSRo+fLhatmypgoICNW0a+ZpUrGvmzJlauHChsrKyqr3+kksu0aFDh7Rv3z7t2rVLhYWFkqRf//rXuvzyyyufl5WVpbVr12r37t0aPXq0iouLa+3jHM/3FMt7BYBUlo79qb7XpGp/og8BweBf2Unq27evli1bpieffFJvvPFGrfkDBgzQ3r17a02fMWOGLrvsMkmRLUFVt/hs375d55xzTq3XVExr27atRo8erb///e8aOHBg1NfXt9z65t188826+eabJUk//elP1aFDB0mRXSpKS0vVpk0bnXrqqbXq+9vf/iZJWrhwoebNm6d58+bV9ZFVOv300zV48GC98cYbtRpMPN9TLO8VAFJduvWn+l6Tqv1Jog8BgWjsQUNB3MJ8kOkrr7zirVu39p/97GcxL+PIkSN+/vnn+5YtWyoPjiwuLq72nH379vmXX35Z+fM3v/lNf/311+t9fX3LrW/ep59+6u7uH330kXfp0sV37drlH3/8sV988cW+YcMGv+yyy/yNN96I+n7qO8j0s88+8//93/91d/cDBw54//79/dVXX23wZxLLe2rsez0ZYfleAvEkToJAfwpBf4o2PZX7k3v9fWjr1q2cBAE4gVh6VODNoyG3MDeYDz/80M8++2zft2/fSS3ntdde84suusgvuOACf+ihhyqnX3nllb5jxw7fvHmz9+jRw3v06OHdu3ev9pz6Xh9ten3z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5eXp8ccfr7a8uj67zp076+KLL1ZhYaGKijjJVWi8+KI0e7ZUUBC5f/HFoCsCMlay+1N9877//e+rbdu21S4UGi+J7E/Rag+qFwMZr7EXDgrilu4Xmjt69KhfcMEFvnnzZj906JD36NHD169fX+dzH330UR83bpxfffXVldPWrVvneXl5vn//fj9y5IgPGzbMP/zww6jT61p/u3btvKSkxI8fP155AbrDhw97nz59fMWKFY16P++8846PHz++znkNXX60z6S+z+rjjz+uvFjel19+6RdddFG1z7Guz65Tp07++eefN+r91SedvpdABXEhVPpTEvtTffMWLVrkq1ev9ry8vJjeT1D9qSG1x7sX15RO30ugqlh6FCNAJ2HdunW69NJLKx+vWbNGQ4cObfRy/v73v+vCCy/UBRdcoObNm2vs2LF6+eWXaz1v+/bteu2113TLLbdUNDCsqQAAIABJREFUm75x40b17dtXubm5atq0qQYNGqSXXnop6vSa3nrrLX3ta19Tp06dZGZq2bKlJOnIkSM6cuSIzEySNGTIEC1YsECS9MADD2jixImNfq/1Lb8hn0l9n9XZZ59debG8U089Vd26ddOOHTvq/ewAIB2lcn+qb97AgQPVunXrWusPe3+qr/YKDe3FAE4eAegk5OXlafPmzZVXZ77nnns0Y8aMas8ZMGBAteHtitubb75Z+ZwdO3bovPPOq3zcoUOHyv+4V3XXXXfp4YcfVpMm1X9t+fn5Wrx4sXbu3KkDBw5o/vz52rZtW9TpNf3xj3/UuHHjKh8fO3ZMhYWFatu2rYYPH65LLrlEkjR16lRNnz5dzz77rN5991099thjMXxq0ZdfVbTPpKGfVUlJid59993KZUf77MxMI0aMUO/evTV37tyY3g8AhE0q96eG9q6qUqk/RdPQXgzg5KXFWeCC0qRJE+Xl5Wn9+vXatGmTOnbsWDkCUWHJkiUnXE5k9K66mlt6/vznP6tt27bq3bu3Fi5cWG1et27dNGnSJA0fPlwtW7ZUQUGBmjZtGnV6VYcPH9Yrr7yiX/7yl5XTsrKytHbtWu3evVujR49WcXGx8vPzNXDgQLm7Zs6cqYULFyorK6vasi655BIdOnRI+/bt065du1RYWChJ+vWvf63LL7/8hMtvyGfSkM9q3759+ta3vqVZs2apVatW9X52y5Yt0znnnKPPPvtMw4cPV9euXTVw4MBa6wCAVJLK/akhvaumVOlP0TSmFwM4eYwAnaS+fftq2bJlmjJliv7zP/+z1vyGbGHr0KFDta1b27dv1znnnFNtOcuWLdMrr7yizp07a+zYsXr77bd10003Vc6/+eabtWbNGi1evFitW7fWRRddVO/0Cq+//rp69fr/27vz+Kjre9/j74+iBaxWqago2oRVqYJLZNMWZVHctZ7zKNW23tvFulWPra3bbVJPBRFQWwWDyOq1rZ56uR4VQVBxAQVFj/a43VpxAUVIVbYQklQ/94+ZwWFIQjKZmd935vd6Ph55TGYymfk4TObjez7f33eO1v77779D7XvvvbdOOOEELViwQFJiScWaNWv0la98RXvuuecO11++fLleeeUVTZ8+XWeeeaZeeeUVvfLKK9s1l5ZuP11zj8nOHqvGxkade+65Ov/88/Wd73xnp49d6nf3228/nXPOOXrhhRearBUAik0x96ed9a5MxdCfWtKWXgwgB9p60FAUXyEfZPrQQw95ly5d/De/+U3Wt9HY2Ojl5eW+cuXKbQdOvvbaa81ef/HixdsdZOruvnbtWnd3f//9971v377+6aeftnh5yne/+12fOXPmtvPr1q3zzz77zN3dt2zZ4scff7w//PDD/tFHH/kRRxzhb7zxho8cOdIXLFjQYn3NHWTa3O239jFp6bH64osv/Ac/+IFfccUVrXrsNm/e7Bs3btz2/ZAhQ3z+/PnN/m5rhPK8BHJJbIJAfypwf2rpZ+++++52GwkUQ39qrvaU1vbi9gjleQnkWjY9KvLm0ZqvkBvM3/72N+/WrZtv3ry5Xbczb9487927t/fo0cNvvPHGbZefcsop/uGHH2533aYazPHHH++HHXaY9+/f3x9//PGdXu7uXltb6126dPH169dvu+zVV1/1I4880o844gj/5je/6TfccIPX1tb64MGDfeHChe6e2Mlm8ODBzf63tNRgmrr9dOn/vc09Js1d/uyzz7okP+KII3zAgAE+YMAAnzdvXrOP3TvvvOP9+/f3/v37e79+/ba7rWyF8rwEcokARH8qdH9q7mdjxozxAw44wDt06OAHHXSQT548uSj6U1O1T58+3d1b34vbK5TnJZBr2fQoS/xe7pnZTEmnS1rn7ocnL5so6QxJDZLekfQ/3X39zm6roqLCV6xYsd1lb775pg47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\n",
      "text/plain": [
       "<Figure size 864x576 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import math\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def changevec(filename):\n",
    "    '''\n",
    "    以矩阵的形式读取文件\n",
    "    '''\n",
    "    file=open('Anscombe.csv','r')\n",
    "    discardHeader = file.readline()# 读取表头\n",
    "    filelist=file.readlines()\n",
    "    filerow=len(filelist)\n",
    "    vec=np.zeros((filerow,filecol))\n",
    "    listnum=[]\n",
    "    i=0\n",
    "    for line in filelist:\n",
    "        line = line.strip() #去掉每行头尾空白 \n",
    "        listline=line.split(',') #按换行符分割数据\n",
    "        vec[i,:] =listline\n",
    "        i+=1\n",
    "    file.close()\n",
    "    return(vec)\n",
    "    \n",
    "vec = changevec('Anscombe.csv')\n",
    "a = np.zeros(group)\n",
    "b= np.zeros(group)\n",
    "\n",
    "i=0\n",
    "for i in range(group):\n",
    "    a[i],b[i] = np.polyfit(vec[:,i*2],vec[:,1+i*2], 1) #一阶拟合\n",
    "    print('第',i+1,'组线性回归方程为：','y = %.5f x+%.5f' % (a[i], b[i]))\n",
    "\n",
    "def plotData(x,y,i,ai,bi,fx,fy):\n",
    "    '''\n",
    "    线性回归的图形输出\n",
    "    '''\n",
    "    plt.title('No: '+str(i+1))\n",
    "    plt.xlabel('x')\n",
    "    plt.ylabel('y') # 规定标题与坐标轴\n",
    "    plt.plot(x,y, 'r*') # 绘制散点图\n",
    "    \n",
    "    streq=r'$'+'y = %.5f x+%.5f' % (ai, bi)+'$'\n",
    "    _label= r'Linear Regression:$y=f(x)$'+\"\\n\"+streq # 图例\n",
    "    plt.plot(fx, fy, 'k-',label=_label) # 绘制回归直线  \n",
    "    plt.legend(loc='best')\n",
    "    \n",
    "figcol=2\n",
    "figrow=math.ceil(group/figcol) # 规定多幅图的排列方式\n",
    "fig=plt.figure(figsize=(12.0,8.0))\n",
    "fig.subplots_adjust(left=0.05,right=0.95,bottom=0.05,top=0.95) # 多图间隔\n",
    "\n",
    "for i in range(group):\n",
    "    plt.subplot(figrow, figcol,i+1) # 绘制多幅图\n",
    "    plt.xlim(0 ,18)\n",
    "    plt.ylim(2 ,14) # x,y轴坐标范围    \n",
    "    fx=np.array([0,18])\n",
    "    fy=a[i]*fx+b[i]\n",
    "    plotData(vec[:,i*2],vec[:,1+i*2],i,a[i],b[i],fx,fy)\n",
    "\n",
    "plt.savefig(\"Practice1_Anscombe.svg\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 小结：如何做一个好的统计分析结果的提供者和消费者？\n",
    "\n",
    "  **答：**\n",
    "  \n",
    "  （1）\n",
    "  \n",
    "   * 做一个好的数据分析结果的提供者，所选取的数据应当足够大，并且具有科学性，以减少数据偏差而造成的取样误差，除此之外还应具有普遍性和代表性，而且易于获取，这样方便他人更方便了解所得数据，从而增加数据的可信度；\n",
    "   * 在分析数据时应考虑合适的分类标准，并要采取合适的模型拟合，尽量尝试多种模型来使统计结果最接近真实情况；\n",
    "   * 在展示统计结果时要采取多样的展示方式，不仅有文字的分析说明，还需要多种图表来直观表现数据的变化趋势、相对大小、所占比例，方便他人直观了解统计数据信息，从而更容易分析和得出结论。\n",
    "   \n",
    "（2）\n",
    "   \n",
    "   * 做一个好的数据分析结果的消费者，要选择正规且权威的分析数据，避免因为数据来源问题造成分析失误，同时需要获得全面数据，客观了解数据；\n",
    "   * 在分析结果时要做到多途径分析，不仅要看样本数据的绝对大小，更要重视其相对比例和变化趋势，综合各方面进行分析，从而得到更加客观真实的结论。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "165px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
